Oracle Hint使用实例

Author Avatar
Serical 7月 03, 2017
  • 在其它设备中阅读本文章

一、背景

table有个日期字段date_time有索引,但是随着时间段不一样,查询时间段记录数占总记录数比例不一样,
有时候走全表扫描,有时候走索引,全表扫描很慢,需要hint来指定走索引

二、全表扫描

SELECT *
  FROM TABLE T
 WHERE T.DATE_TIME >= TO_DATE('20170101', 'YYYYMMDD')
   AND T.DATE_TIME <= TO_DATE('20170331', 'YYYYMMDD')

全表扫描如下:

三、索引扫描

SELECT *
  FROM TABLE T
 WHERE T.DATE_TIME >= TO_DATE('20170101', 'YYYYMMDD')
   AND T.DATE_TIME <= TO_DATE('20170301', 'YYYYMMDD')

索引扫描如下:

四、Hint

SELECT /*+INDEX(T INDEX_DATE_TIME)*/
 *
  FROM TABLE T
 WHERE T.DATE_TIME >= TO_DATE('20170101', 'YYYYMMDD')
   AND T.DATE_TIME <= TO_DATE('20170331', 'YYYYMMDD')

结果如下:

注意点

/*+INDEX(T INDEX_DATE_TIME)*/中要使用表的别名(T),否则无效。